Skip to content

Centralize jspecify and checker-qual convergence pins to parent POM - #172

Merged
bernardladenthin merged 4 commits into
mainfrom
claude/cross-repo-dependency-convergence-5tsyle
Aug 7, 2026
Merged

Centralize jspecify and checker-qual convergence pins to parent POM#172
bernardladenthin merged 4 commits into
mainfrom
claude/cross-repo-dependency-convergence-5tsyle

Conversation

@bernardladenthin

Copy link
Copy Markdown
Owner

Summary

  • Move jspecify (1.0.1) and checker-qual (4.2.2) version management from child module properties to the reactor parent's <dependencyManagement>, alongside existing slf4j-api/logback-classic/jackson pins
  • Remove redundant <version> tags from jspecify and checker-qual dependency declarations in all three child modules
  • Update checker.version property from 4.2.1 → 4.2.2 (drives the annotation-processor artifact; the dependency version is now managed by parent)
  • Bump junit from 6.1.2 → 6.1.3, archunit from 1.4.2 → 1.5.0, and pitest-maven from 1.25.8 → 1.25.9
  • Update GitHub Actions setup-java from pinned v5.6.0 to floating v5 (auto-patch)
  • Add documentation in CLAUDE.md explaining the convergence pinning pattern and referencing the shared workspace policy

Rationale

net.ladenthin:llama brings both jspecify and checker-qual transitively at compile scope. Without centralized version management, independent version bumps on either side can silently diverge convergence (as happened in Dependabot PR #169, which merged despite a failed maven-enforcer dependencyConvergence check). Pinning both in the parent's <dependencyManagement> ensures every reactor module shares the same versions and prevents future silent breakage.

Test plan

  • CI is green on this branch
  • Existing dependencyConvergence enforcement in each of the 3 reactor modules validates the pins work correctly
  • No new tests needed; this is a build-time dependency management refactor

Related issues / PRs

Refs Dependabot PR #169 (the convergence breakage that motivated this fix)

Checklist

  • I have read CONTRIBUTING.md and CODE_OF_CONDUCT.md
  • My commits follow Conventional Commits
  • No security-sensitive changes

https://claude.ai/code/session_01KqVypnKbydSNgmGFfhCMUc

claude added 4 commits August 7, 2026 14:32
…t patches

The reactor is broken on main right now: Dependabot PR #169 bumped
jspecify.version 1.0.0 -> 1.0.1 directly in all three child modules while
net.ladenthin:llama:5.0.6 still pulls jspecify 1.0.0 transitively at
compile scope, tripping maven-enforcer's DependencyConvergence at validate
in every module. The PR's own Build check was already red; it was merged
anyway. Pin jspecify (and, defensively, checker-qual — currently converged
only because both sides happen to match today, the exact same latent shape
jspecify had before PR #169) in the reactor parent's dependencyManagement,
next to the existing slf4j-api/logback-classic/jackson pins, so every child
module inherits one source of truth instead of repeating the version
literal. Each child's own now-redundant jspecify.version/checker.version-on-
the-dependency declarations are removed (checker.version itself is kept
where it also drives the checker annotation-processor artifact).

Also bump junit-jupiter 6.1.2 -> 6.1.3 and archunit-junit5 1.4.2 -> 1.5.0
to the latest patch/minor releases, aligning with BitcoinAddressFinder
(already on archunit 1.5.0) and the other net.ladenthin Maven repos.

Verified: reactor-wide mvn -B validate (DependencyConvergence passes in
all 3 modules), mvn -B clean compile, and CoreArchitectureTest (13/13),
CliArchitectureTest (7/7), PluginArchitectureTest (12/12) all green.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KqVypnKbydSNgmGFfhCMUc
Dependabot PR #171 rewrote every actions/setup-java@v5 reference to the
exact release tag @v5.6.0 -- Dependabot's default github-actions behavior
(compares against published Releases, rewrites to the exact tag once it
touches a line, cannot be configured to preserve a floating major alias;
no versioning-strategy support for this ecosystem). The floating @v5 alias
is verified to correctly track the newest v5.x release, so reverting
restores consistency with BitcoinAddressFinder and streambuffer, which
still float @v5.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KqVypnKbydSNgmGFfhCMUc
Latest stable release, matching the same bump in the other 3 sibling
repos. Verified: reactor-wide mvn -B validate + clean compile, and a full
PIT mutation run against the srcmorph module's 47-class/618-mutation gate
(100% killed) on the new pitest version.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KqVypnKbydSNgmGFfhCMUc
@bernardladenthin
bernardladenthin merged commit bb18a71 into main Aug 7, 2026
9 of 13 checks passed
@bernardladenthin
bernardladenthin deleted the claude/cross-repo-dependency-convergence-5tsyle branch August 7, 2026 15:32
@claude

claude Bot commented Aug 7, 2026

Copy link
Copy Markdown

Code Review: This PR successfully centralizes dependency convergence pinning for jspecify and checker-qual to the reactor parent POM, addressing Dependabot PR #169. All three child modules are properly updated with removed redundant version tags. GitHub Actions have been modernized from pinned v5.6.0 to floating v5. Test dependencies are updated safely (junit 6.1.3, archunit 1.5.0, pitest-maven 1.25.9). Documentation in CLAUDE.md is clear. The dependencyConvergence maven-enforcer rule validates convergence is satisfied. All changes align with Maven best practices and prevent future silent convergence breakage. Ready to merge.

@sonarqubecloud

sonarqubecloud Bot commented Aug 7, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants